# 数据分析题目解答(建议先赞后看，养成习惯 如果不赞，先拉出去枪毙两分钟 作者：小匠IT)
import pandas as pd
import matplotlib.pyplot as plt
import os
from matplotlib.font_manager import FontProperties

# 设置中文字体路径（请根据实际路径调整）
font_path = r'fonts/SIMSUN.TTC'
font_prop = FontProperties(fname=font_path)

# 输入数据
data = {
    '日期': ['10-1', '10-2', '10-3', '10-4', '10-5', '10-6', '10-7', '10-8', '10-9', '10-10', 
            '10-11', '10-12', '10-13', '10-14', '10-15', '10-16', '10-17', '10-18', '10-19', '10-20',
            '10-21', '10-22', '10-23', '10-24', '10-25', '10-26', '10-27', '10-28', '10-29', '10-30'],
    '客服首次响应时长（秒）': [76, 82, 79, 78, 69, 58, 76, 89, 66, 123, 102, 85, 50, 66, 69, 85, 68, 72, 85, 59,
                             77, 78, 65, 60, 59, 68, 74, 65, 81, 69],
    '客服10分钟未响应次数': [5, 8, 2, 5, 3, 2, 0, 1, 0, 10, 12, 2, 5, 0, 2, 1, 3, 5, 1, 3, 5, 1, 0, 2, 0, 6, 1, 3, 1, 0],
    '客服未回复次数': [0, 0, 2, 0, 0, 1, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
}

df = pd.DataFrame(data)

# 将日期列转换为 datetime 类型
df['日期'] = pd.to_datetime(df['日期'], format='%m-%d')

# 计算统计数据
mean_response_time = df['客服首次响应时长（秒）'].mean()
median_response_time = df['客服首次响应时长（秒）'].median()
max_response_time = df['客服首次响应时长（秒）'].max()

mean_no_response_10min = df['客服10分钟未响应次数'].mean()
median_no_response_10min = df['客服10分钟未响应次数'].median()
max_no_response_10min = df['客服10分钟未响应次数'].max()

mean_no_reply = df['客服未回复次数'].mean()
median_no_reply = df['客服未回复次数'].median()
max_no_reply = df['客服未回复次数'].max()

print(f"客服首次响应时长（秒）: 平均值={mean_response_time:.2f}, 中位数={median_response_time}, 最大值={max_response_time}")
print(f"客服10分钟未响应次数: 平均值={mean_no_response_10min:.2f}, 中位数={median_no_response_10min}, 最大值={max_no_response_10min}")
print(f"客服未回复次数: 平均值={mean_no_reply:.2f}, 中位数={median_no_reply}, 最大值={max_no_reply}")

# 识别异常值
abnormal_response_time = df[df['客服首次响应时长（秒）'] > mean_response_time + 2 * df['客服首次响应时长（秒）'].std()]['日期'].tolist()
abnormal_no_response_10min = df[df['客服10分钟未响应次数'] > mean_no_response_10min + 2 * df['客服10分钟未响应次数'].std()]['日期'].tolist()
abnormal_no_reply = df[df['客服未回复次数'] > mean_no_reply + 2 * df['客服未回复次数'].std()]['日期'].tolist()

if abnormal_response_time:
    print(f"客服首次响应时长在以下日期出现了异常：{', '.join([date.strftime('%m-%d') for date in abnormal_response_time])}")
else:
    print("客服首次响应时长没有出现异常。")

if abnormal_no_response_10min:
    print(f"客服10分钟未响应次数在以下日期出现了异常：{', '.join([date.strftime('%m-%d') for date in abnormal_no_response_10min])}")
else:
    print("客服10分钟未响应次数没有出现异常。")

if abnormal_no_reply:
    print(f"客服未回复次数在以下日期出现了异常：{', '.join([date.strftime('%m-%d') for date in abnormal_no_reply])}")
else:
    print("客服未回复次数没有出现异常。")

# 可视化数据
plt.figure(figsize=(12, 8))

plt.subplot(3, 1, 1)
plt.plot(df['日期'], df['客服首次响应时长（秒）'], marker='o')
plt.title('客服首次响应时长（秒）', fontproperties=font_prop)
plt.grid(True)

plt.subplot(3, 1, 2)
plt.plot(df['日期'], df['客服10分钟未响应次数'], marker='o', color='orange')
plt.title('客服10分钟未响应次数', fontproperties=font_prop)
plt.grid(True)

plt.subplot(3, 1, 3)
plt.plot(df['日期'], df['客服未回复次数'], marker='o', color='green')
plt.title('客服未回复次数', fontproperties=font_prop)
plt.grid(True)

plt.tight_layout()
output_folder = r'output/46'
os.makedirs(output_folder, exist_ok=True)
output_image_file = os.path.join(output_folder, '客服转化核心数据.png')
plt.savefig(output_image_file)
plt.show()

print(f"\n包含分析结果的新图片文件已保存到 {output_image_file}")

# 提供分析结论
analysis_conclusion = (
    "从10月1日至10月30日的数据来看，客服首次响应时长、10分钟未响应次数和未回复次数存在一些波动。\n"
    "特别是10月10日和10月11日，客服首次响应时长显著增加，分别达到了123秒和102秒，远高于平均水平。\n"
    "此外，10分钟未响应次数在10月10日和10月11日也明显增多，分别为10次和12次，这可能是导致客户流失的重要因素。\n"
    "未回复次数方面，10月10日有3次未回复，也是异常高的。\n"
    "这些异常情况可能会影响客户的满意度和转化率，建议进一步调查原因，并采取措施改善客服响应速度和服务质量。\n"
    "具体建议如下：\n"
    "1. 增加客服人员数量或优化排班，确保高峰时段有足够的客服资源。\n"
    "2. 使用自动化工具如聊天机器人来辅助人工客服，减少等待时间。\n"
    "3. 对客服团队进行培训，提高其解决问题的能力和效率。\n"
    "4. 定期审查和优化客服流程，确保及时响应客户需求。\n"
)

print(f"分析结论:\n{analysis_conclusion}")